package Persistencia;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import Modelo.Cliente;


public class AdministradorPersistenciaCliente 
{
	private static AdministradorPersistenciaCliente pool;
	
	
	private AdministradorPersistenciaCliente()
	{
		
	}
	
	public static AdministradorPersistenciaCliente getInstancia()
	{
		if (pool== null)
			pool =new AdministradorPersistenciaCliente();
		return pool;
	}
	
	public boolean insert(Cliente c)
	{
		//Obtener conexion BD 
		Connection con = PoolConnection.getPoolConnection().getConnection();
		
		//Generar sentencia SQL
		try
		{
			//Preparar sentencia insert en tabla destino
			String senten = "INSERT INTO cliente (dni, apellido , nombre, domicilio, telefono, email, estado) VALUES (?,?,?,?,?,?,1)" ;
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setString(1,c.getDni());
			ps.setString(2,c.getApellido());
			ps.setString(3,c.getNombre());
			ps.setString(4,c.getDomicilio());
			ps.setInt(5,c.getTelefono());
			ps.setString(6,c.getEmail());
			ps.execute();
			PoolConnection.getPoolConnection().realeaseConnection(con);
			return true;
		}
	      catch( SQLException e ) 
	      {
				System.out.println("Mensaje Error al Insertar Cliente: " + e.getMessage());
				System.out.println("Stack Trace al Insertar Cliente: " + e.getStackTrace());
				PoolConnection.getPoolConnection().realeaseConnection(con);
				return false;
	      }
	      
	}
	public boolean update(Cliente c)
	{
		//Obtener conexion BD 
		Connection con = PoolConnection.getPoolConnection().getConnection();
		
		//Generar sentencia SQL
		try
		{
			//Preparar sentencia insert en tabla destino
			String senten = "UPDATE cliente set nombre = ?  ,apellido = ?, domicilio = ? , telefono = ?, estado = ?  where dni = ?" ;
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setString(1,c.getNombre());
			ps.setString(2,c.getApellido());
			ps.setString(3,c.getDomicilio());
			ps.setInt(4,c.getTelefono());
			ps.setInt(5,c.getEstado());
			ps.setString(6,c.getDni());
			ps.execute();
			PoolConnection.getPoolConnection().realeaseConnection(con);
			return true;
	
		}
	      catch( SQLException e ) 
	      {
				System.out.println("Mensaje Error al Modificar Cliente: " + e.getMessage());
				System.out.println("Stack Trace al Modificar Cliente: " + e.getStackTrace());
				PoolConnection.getPoolConnection().realeaseConnection(con);
	      }
		return false;
	      
		
	}
	public void delete (Cliente c)
	{
		//Obtener conexion BD 
		Connection con = PoolConnection.getPoolConnection().getConnection();
		
		//Generar sentencia SQL
		try
		{
			//Preparar sentencia insert en tabla destino
			String senten = "DELETE from cliente where dni = ?" ;
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setString(1,c.getDni());
			ps.execute();
			
			PoolConnection.getPoolConnection().realeaseConnection(con);
			
		}
	      catch( SQLException e ) 
	      {
				System.out.println("Mensaje Error al Borrar Cliente: " + e.getMessage());
				System.out.println("Stack Trace al Borrar Cliente: " + e.getStackTrace());
				PoolConnection.getPoolConnection().realeaseConnection(con);
	      }
	      

	}
	public Cliente buscarCliente(String dni)
	{
		Cliente c = null;
		//Obtener conexion BD 
		Connection con = PoolConnection.getPoolConnection().getConnection();
		
		//Generar sentencia SQL
		try
		{
			//Preparar sentencia insert en tabla destino
			String senten = "SELECT dni, apellido , nombre, domicilio, telefono, email, estado from cliente where dni = ?" ;
			String sentenLinea = "SELECT * from linea where usuario_id = ?" ;
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setString(1,dni);
			ResultSet result = ps.executeQuery();
			while (result.next())
			{
				c = new Cliente();
				c.setNombre(result.getString("nombre"));
				c.setApellido(result.getString("apellido"));
				c.setDni(result.getString("dni"));
				c.setDomicilio(result.getString("domicilio"));
				c.setTelefono(result.getInt("telefono"));
				c.setEmail(result.getString("email"));
				c.setEstado(result.getInt("estado"));
				
				PreparedStatement psLinea = null;
				psLinea = con.prepareStatement(sentenLinea);
				psLinea.setString(1,result.getString("dni"));
				ResultSet resultLinea = psLinea.executeQuery();
				while (resultLinea.next())
				{
				c.getLineas().add(AdministradorPersistenciaLineas.getInstancia().getlineaPorId(resultLinea.getInt("numero"))); 
				}
				
				
			}
			
			PoolConnection.getPoolConnection().realeaseConnection(con);
			return c;
		}
	      catch( SQLException e ) 
	      {
				System.out.println("Mensaje Error al Borrar Cliente: " + e.getMessage());
				System.out.println("Stack Trace al Borrar Cliente: " + e.getStackTrace());
				PoolConnection.getPoolConnection().realeaseConnection(con);
	      }
	      return c;
	}
	
}
